/*
 * Copyright (C) Beijing Decision Credit Technologies, Ltd
 *
 * ProjectName:WIKKaShen
 * PackageName:com.woaika.kashen.utils
 * FileName:AnalyticsHelper.java
 * 
 */
package com.qdaily.ui.util;

import android.content.Context;
import cn.jpush.android.api.JPushInterface;
import com.baidu.mobstat.StatService;

import java.util.HashMap;

/**
 * Description: 第三方统计, 对BAIDU、UMENG的封装。可自行开关。
 * <p/>
 * Author: chencheng
 * <p/>
 * Date: 2015-05-7上午11:34:30
 * <p/>
 * Version:1.0
 */
public class AnalyticsHelper {
    private static AnalyticsHelper analyticsHelper = null;
    private boolean isBaiduAnalyticsEnabled = true;
    private boolean isUmengAnalyticsEnabled = true;
    private boolean isJPushAnalyticsEnabled = true;

    public static AnalyticsHelper getInstance() {
        if (analyticsHelper == null) {
            if (analyticsHelper == null) {
                analyticsHelper = new AnalyticsHelper();
            }
        }
        return analyticsHelper;
    }

    /**
     * Umeng K-V Event
     *
     * @param context
     * @param id
     * @param values
     */
    public void onEvent(Context context, int id, HashMap<String, String> values) {
        //        MobclickAgent.onEvent(context, context.getString(id), values);
    }

    public void onResume(Context context) {
        if (isBaiduAnalyticsEnabled) {
            /**
             * 页面起始（每个Activity中都需要添加，如果有继承的父Activity中已经添加了该调用，那么子Activity中务必不能添加
             * ） 不能与StatService.onPageStart一级onPageEnd函数交叉使用
             */
            StatService.onResume(context);
        }
        if (isUmengAnalyticsEnabled) {
            //            MobclickAgent.onResume(context);
        }
        if (isJPushAnalyticsEnabled) {
            JPushInterface.onResume(context);
        }
    }

    public void onPause(Context context) {
        if (isBaiduAnalyticsEnabled) {
            /**
             * 页面结束（每个Activity中都需要添加，如果有继承的父Activity中已经添加了该调用，那么子Activity中务必不能添加
             * ） 不能与StatService.onPageStart一级onPageEnd函数交叉使用
             */
            StatService.onPause(context);
        }
        if (isUmengAnalyticsEnabled) {
            //            MobclickAgent.onPause(context);
        }
        if (isJPushAnalyticsEnabled) {
            JPushInterface.onPause(context);
        }
    }

    /**
     * Fragment status
     *
     * @param context
     * @param tag
     */
    public void onResumed(Context context, String tag) {
        if (isBaiduAnalyticsEnabled) {
            StatService.onPageStart(context, tag);
        }
        //        if (isJPushAnalyticsEnabled) {
        //            JPushInterface.onFragmentResume(context, tag);
        //        }
    }

    /**
     * Fragment status
     *
     * @param context
     * @param tag
     */
    public void onPaused(Context context, String tag) {
        if (isBaiduAnalyticsEnabled) {
            StatService.onPageEnd(context, tag);
        }
        //        if (isJPushAnalyticsEnabled) {
        //            JPushInterface.onFragmentPause(context, tag);
        //        }
    }

    /********************************************* 事件统计 ********************************************/

    /**
     * 此方法为标准的自定义事件，传入的是string.xml的事件ID
     *
     * @param context
     * @param registeredId
     *         必须在mtj网站的自定义事件中添加
     * @param onEvent
     *         是该注册事件下的事件
     */
    public void onEvent(Context context, int registeredId, int onEvent) {
        StatService.onEvent(context, context.getString(registeredId), context.getString(onEvent));
        //        MobclickAgent.onEvent(context, context.getString(registeredId), context.getString(onEvent));
    }

    /**
     * 此方法为标准的自定义事件，传入的是字符串。
     *
     * @param context
     * @param registeredId
     *         必须在mtj网站的自定义事件中添加
     * @param onEvent
     *         是该注册事件下的事件
     */
    public void onEvent(Context context, String registeredId, String onEvent) {
        StatService.onEvent(context, registeredId, onEvent);
        //        MobclickAgent.onEvent(context, registeredId, onEvent);
    }

    /**
     * @param context
     * @param registeredId
     *         必须在mtj网站的自定义事件中添加
     * @param onEvent
     *         是该注册事件下的事件
     * @param duration
     *         其时长持续100毫秒
     */
    public void onEventDuration(Context context, String registeredId, String onEvent, int duration) {
        StatService.onEventDuration(context, registeredId, onEvent, duration);
    }

    /**
     * @param context
     * @param registeredId
     *         必须在mtj网站的自定义事件中添加
     * @param onEvent
     *         是该注册事件下的事件 其时长持续10毫秒 必须和onEventEnd共用才行
     *         主要作用于：假设此Fragment嵌套在ListFragment中
     *         ，同时ListFragment中使用onPause／onResume这对统计函数，
     *         子Fragment需要onPageStart／onPageEnd代替
     */
    public void onEventStart(Context context, String registeredId, String onEvent) {
        StatService.onEventStart(context, registeredId, onEvent);
        //        MobclickAgent.onEventBegin(context, registeredId, onEvent);
    }

    public void onEventStart(Context context, int registeredId, int onEvent) {
        StatService.onEventStart(context, context.getString(registeredId), context.getString(onEvent));
        //        MobclickAgent.onEventBegin(context, context.getString(registeredId), context.getString(onEvent));
    }

    /**
     * @param context
     * @param registeredId
     *         必须在mtj网站的自定义事件中添加
     * @param onEvent
     *         是该注册事件下的事件 其时长持续10毫秒 onEventStart
     *         主要作用于：假设此Fragment嵌套在ListFragment中
     *         ，同时ListFragment中使用onPause／onResume这对统计函数，
     *         子Fragment需要onPageStart／onPageEnd代替
     */
    public void onEventEnd(Context context, String registeredId, String onEvent) {
        StatService.onEventEnd(context, registeredId, onEvent);
        //        MobclickAgent.onEventEnd(context, registeredId, onEvent);
    }

    public void onEventEnd(Context context, int registeredId, int onEvent) {
        StatService.onEventEnd(context, context.getString(registeredId), context.getString(onEvent));
        //        MobclickAgent.onEventEnd(context, context.getString(registeredId), context.getString(onEvent));
    }

    // 此时由于此Fragment嵌套在ListFragment中，同时使用onPause／onResume这对统计函数，需要onPageStart／onPageEnd代替
    public void onPageStart(Context context, String detail) {
        if (isBaiduAnalyticsEnabled) {
            StatService.onPageStart(context, detail);
        }
        if (isUmengAnalyticsEnabled) {
            //            MobclickAgent.onPageStart(detail);
        }
    }

    // 此时由于此Fragment嵌套在ListFragment中，同时使用onPause／onResume这对统计函数，需要onPageStart／onPageEnd代替
    public void onPageEnd(Context context, String detail) {
        if (isBaiduAnalyticsEnabled) {
            StatService.onPageEnd(context, detail);
        }
        if (isUmengAnalyticsEnabled) {
            //            MobclickAgent.onPageEnd(detail);
        }
    }

    /**
     * 对于好多应用，会在程序中杀死 进程，这样会导致我们统计不到此时Activity结束的信息， 对于这种情况需要调用
     * 'MobclickAgent.onKillProcess( Context )' 方法，保存一些页面调用的数据。正常的应用是不需要调用此方法的。
     *
     * @param context
     */
    public void onKillProcess(Context context) {
        //        MobclickAgent.onKillProcess(context);
        JPushInterface.onKillProcess(context);
    }

}
